'''
==================================
MST::exploits&multis=>functions
URL::http://mstoor.duapp.com
==================================
'''
from   socket    import *
from   MstColor  import *
from   os        import listdir,getcwd
import re,sys,hashlib
import threading,time,Queue
import MultipartPostHandler
import urllib,urllib2,cookielib

ver = 20131117

class fuck:
    '''You can use fuck.func() in your plugins(exp&mul)'''
    ##############################################
    #         CHECKPORT::By:mst                  #
    ##############################################
    def checkport(self,host,port):
        '''check host's port'''
        try:
            s=socket(AF_INET,SOCK_STREAM)
            s.settimeout(5)
            s.connect((host,int(port)))
            s.close()
            return True
        except:
            return False
    ##############################################
    #          GET URL:By:mst                    #
    ##############################################
    def urlget(self,url):
        '''url open=>get'''
        try:
            return urllib.urlopen(url)
        except:
            return False
    ##############################################
    #          URL POST::By:mst                  #
    ##############################################
    def urlpost(self,url,value):
        '''url post'''
        data    = urllib.urlencode(value)
        headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11' }
        res     = urllib2.Request(url,data,headers)
        try:
            ok  = urllib2.urlopen(res)
            return ok
        except:
            return False
    ##############################################
    #          UPLOAD FILE::By:mst               #
    ##############################################
    def urlupload(self,url,value):
        '''url upload file'''
        try:
            cookies = cookielib.CookieJar()
            opener  = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies),MultipartPostHandler.MultipartPostHandler)
            opener.open(url, value)
        except:
            return False
    ##############################################
    #          URL TO IP::By:mst                 #
    ##############################################
    def urltoip(self,url):
        '''url to ip'''
        try:
            return gethostbyname(url)
        except:
            return False
    ##############################################
    #          write log::By:mst                 #
    ##############################################
    def writelog(self,logname,log):
        '''write log to file'''
        try:
            fp = open('output/%s.log'%logname,'a')
            fp.write(log+"\n")
            fp.close()
        except:
            return False
    ##############################################
    #        find sth by re::By:mst              #
    ##############################################
    def find(self,r,t):
        '''re find'''
        try:
            return re.findall(r,t)
        except:
            return False
    ##############################################
    #          TOPAYLOAD::By:mst                 #
    ##############################################
    def topayload(self,PAYLOAD,arr):
        '''send args to payload'''
        if PAYLOAD.upper() != "FALSE" and len(PAYLOAD)>0:
            color.cprint("[*] Start Payload ..",YELLOW)
            code=open("plugins/payload/"+PAYLOAD+".py").read()
            exec(code)
            exec("global mstpayload")
            payload=mstpayload(arr)
            code=open("libs/MstPayload.py").read()
            exec(code)
            payload.start()
    ##############################################
    #          FORMATE URL::By:mst               #
    ##############################################
    def urlformate(self,url,port,path):
        '''formate url~~~...need url port and path'''
        if port == "443":
            tmp = "https://%s%s"%(url,path)
        elif port == "80":
            tmp = "http://%s%s"%(url,path)
        else:
            tmp = "http://%s:%s%s"%(url,port,path)
        return tmp
    ##############################################
    #      THREAD FUNCTION::By:mst&L34Rn         #
    ##############################################
    def thread(self,func,args,thr):
        '''[1] the func to run,[2] the func's args,[3] the thread nums'''
        q = Queue.Queue()
        t = []
        def start(q):
            while not q.empty():
                func(q.get())
        for a in args:
            q.put(a)
        for i in range(int(thr)):
            tt = threading.Thread(target=start,args=(q,))
            t.append(tt)
        for i in range(int(thr)):
            t[i].start()
        for i in range(int(thr)):
            t[i].join(timeout=3)




if __name__ == '__main__':
    print __doc__
